package 设计原则.迪米特.imporve;

import java.util.ArrayList;
import java.util.List;

//客户端
public class Demeter1 {
    public static void main(String[] args) {
        System.out.println("使用迪米特法则改进");
        //创建一个SchoolManager对象
        SchoolManager schoolManager = new SchoolManager();
        //输出学院员工id和学校总部的员工信息
        schoolManager.printAllEmployee(new CollegeManager());
    }
}

//学校总部员工
class Employee {
    private String id;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }
}

//管理学院员工的类
class CollegeManager {
    public List<CollegeEmployee> getAllEmployee() {
        List<CollegeEmployee> list = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            CollegeEmployee emp = new CollegeEmployee();
            emp.setId("学院员工id="+i);
            list.add(emp);
        }
        return list;
    }

    /**
     *  输出学院员工的信息
     */
    public void printEmployee() {
        List<CollegeEmployee> list1 = this.getAllEmployee();
        System.out.println("-----------分公司员工------------");
        for (CollegeEmployee e : list1) {
            System.out.println(e.getId());
        }
    }
}

//学校管理类
//分析SchoolManager 直接朋友类有哪些:CollegeManager(方法参数),Employee(方法返回值)
//CollegeEmployee不是直接朋友，而是一个陌生类，违背了迪米特原则
class SchoolManager {
    //返回学校总部员工
    public List<Employee> getAllEmpoyee() {
        List<Employee> list = new ArrayList<>();
        for (int i = 0; i < 5; i++) {
            Employee emp = new Employee();
            emp.setId("学校总部员工id="+i);
            list.add(emp);
        }
        return list;
    }

    //该方法完成输出学校总部和学院员工信息的一个方法
    void printAllEmployee(CollegeManager sub) {
        //分析问题
        //1.将输出学院的员工方法，封装到CollegeManager
//        List<CollegeEmployee> list1 = sub.getAllEmployee();
//        System.out.println("-----------分公司员工------------");
//        for (CollegeEmployee e : list1) {
//            System.out.println(e.getId());
//        }
        sub.printEmployee();

        System.out.println("-----------总部员工------------");
        List<Employee> list2 = this.getAllEmpoyee();
        for (Employee e : list2) {
            System.out.println(e.getId());
        }
    }
}

class CollegeEmployee extends Employee {

}